#ifndef __BT_CMD_H__
#define __BT_CMD_H__
#include "includes.h"
#include "app.h"

typedef enum {
    CMD_STATE_START = 0,
    CMD_STATE_TYPE,
    CMD_STATE_LEN,
    CMD_STATE_DATA,
    CMD_STATE_COMPLETE
} CmdState;

typedef enum {
    CMD_ACTIVE_OBD = 0x01,
    CMD_GET_STATUS,
    CMD_GET_ERROR_CODE,
    CMD_CLEAR_ERROR_CODE,
    CMD_GET_PAYLOAD = 0x81,     //负荷值
    CMD_GET_ECT,                //发动机冷却液温度
    CMD_GET_RPM,                //发动机转速
    CMD_GET_SPEED,              //车速
    CMD_GET_MIL_DISTANCE,       //故障指示灯（MIL）点亮后行驶距离
    CMD_GET_RELATIVE_FRP,       //相对于歧管真空度的燃油轨压力
    CMD_GET_FRP,                //燃油轨压力
    CMD_GET_RATIO_1_1,          //当量比(λ)(缸组1,传感器1)
    CMD_GET_O2VOL_1_1,          //氧传感器电压(缸组1,传感器1)
    CMD_GET_RATIO_1_2,          //当量比(λ)(缸组1,传感器2)
    CMD_GET_O2VOL_1_2,          //氧传感器电压(缸组1,传感器2)
    CMD_GET_RATIO_1_3,          //当量比(λ)(缸组1,传感器3)
    CMD_GET_O2VOL_1_3,          //氧传感器电压(缸组1,传感器3)
    CMD_GET_RATIO_1_4,          //当量比(λ)(缸组1,传感器4)
    CMD_GET_O2VOL_1_4,          //氧传感器电压(缸组1,传感器4)
    CMD_GET_RATIO_2_1,          //当量比(λ)(缸组2,传感器1)
    CMD_GET_O2VOL_2_1,          //氧传感器电压(缸组2,传感器1)
    CMD_GET_RATIO_2_2,          //当量比(λ)(缸组2,传感器2)
    CMD_GET_O2VOL_2_2,          //氧传感器电压(缸组2,传感器2)
    CMD_GET_RATIO_2_3,          //当量比(λ)(缸组2,传感器3)
    CMD_GET_O2VOL_2_3,          //氧传感器电压(缸组2,传感器3)
    CMD_GET_RATIO_2_4,          //当量比(λ)(缸组2,传感器4)
    CMD_GET_O2VOL_2_4,          //氧传感器电压(缸组2,传感器4)
    CMD_GET_EGR,                //指令EGR
    CMD_GET_EGR_ERROR,          //EGR 废气再循环故障
    CMD_GET_IOEP,               //指令的蒸发净化
    CMD_GET_FUEL_LEVEL_INPUT,   //燃油液位输入
    CMD_GET_AFTER_START_TIMES,  //清除故障码后的暖机次数
    CMD_GET_AFTER_DISTANCE,     //清除故障码后的行驶距离
    CMD_GET_EMISSION_SYS_PRESS, //燃油蒸气排放系统压力
    CMD_GET_PRESS,              //大气压
    CMD_GET_O2CUR_1_1,          //氧传感器电流(缸组1,传感器1)
    CMD_GET_RATIO2_1_1,         //当量比(λ)(缸组1,传感器1)
    CMD_GET_O2CUR_1_2,          //氧传感器电流(缸组1,传感器2)
    CMD_GET_RATIO2_1_2,         //当量比(λ)(缸组1,传感器2)
    CMD_GET_O2CUR_1_3,          //氧传感器电流(缸组1,传感器3)
    CMD_GET_RATIO2_1_3,         //当量比(λ)(缸组1,传感器3)
    CMD_GET_O2CUR_1_4,          //氧传感器电流(缸组1,传感器4)
    CMD_GET_RATIO2_1_4,         //当量比(λ)(缸组1,传感器4)
    CMD_GET_O2CUR_2_1,          //氧传感器电流(缸组2,传感器1)
    CMD_GET_RATIO2_2_1,         //当量比(λ)(缸组2,传感器1)
    CMD_GET_O2CUR_2_2,          //氧传感器电流(缸组2,传感器2)
    CMD_GET_RATIO2_2_2,         //当量比(λ)(缸组2,传感器2)
    CMD_GET_O2CUR_2_3,          //氧传感器电流(缸组2,传感器3)
    CMD_GET_RATIO2_2_3,         //当量比(λ)(缸组2,传感器3)
    CMD_GET_O2CUR_2_4,          //氧传感器电流(缸组2,传感器4)
    CMD_GET_RATIO2_2_4,         //当量比(λ)(缸组2,传感器4)
    CMD_GET_CAT_TEMP_1_1,       //催化剂温度(缸组1,传感器1)
    CMD_GET_CAT_TEMP_2_1,       //催化剂温度(缸组2,传感器1)
    CMD_GET_CAT_TEMP_1_2,       //催化剂温度(缸组1,传感器2)
    CMD_GET_CAT_TEMP_2_2,       //催化剂温度(缸组2,传感器2)
    CMD_GET_FUEL_SYS_1,         //燃油系统1 状态
    CMD_GET_FUEL_SYS_2,         //燃油系统2 状态
    CMD_GET_SHORT_FUEL_ADJ_1,   //短期燃油修正(缸组1)
    CMD_GET_LONG_FUEL_ADJ_1,    //长期燃油修正(缸组1)
    CMD_GET_SHORT_FUEL_ADJ_2,   //短期燃油修正(缸组2)
    CMD_GET_LONG_FUEL_ADJ_2,    //长期然后修正(缸组2)
    CMD_GET_ABS_PRESS,          //进气歧管绝对压力
    CMD_GET_ADVANCE_ANGLE,      //气缸1 点火提前角
    CMD_GET_GAS_TEMP,           //进气温度
    CMD_GET_THROTTLE_POS,       //节气门绝对位置
    CMD_GET_O2_POS,             //氧传感器位置

    CMD_SEND_CAN_DATA = 0xff,          //发送标准can数据
} CmdType;

void resetAtCmd(void);
void handleBt(u8 data);
void deal_with_ds(LinkType linkType, u8 type);

void response_ok(void);
void response_err(void);
void response_link_obd(LinkType type);
void response_obd_status(OBDStatus status);
void response_error_codes(u8 num, u16 *codes);
void response_with_datastream(u8 type, u16 len, u8 *data);
#endif
